/**
 * Created by no1 on 2015/7/3.
 */

//DAO(Data Access Object)是一个数据访问接口，数据访问：顾名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。

'use strict';

var CounterModel = require('../mongoDao/models').counter;
var sequelize = require('./sequelize.js');

var D = require('./function');
var F = require('../../function');
function DaoBase(data) {
  this.db = require('../../../../common/mysql');
  this.model = data.model;
  this.data = data;
}

/*
 @todo 保存一条
 @doc 保存的字段
 @opt 参数
 */
DaoBase.prototype.save = function* (doc, opt) {
  let instance = this.model.build(doc);
  let result = yield instance.save();
  return F.returnData(0, '添加成功', result);
};

/*
 @todo 查询一条
 @query 查询条件
 @opt 参数
 */
DaoBase.prototype.getOneByQuery = function* (doc, opt) {
  let ret = yield this.model.findOne({where: doc});
  if (!ret || !ret.dataValues) return F.returnData(1, '没有记录');
  return F.returnData(0, '有记录', ret.dataValues);
};

/*
 @todo 查询一条
 @query 查询条件
 @opt 参数
 */
//DaoBase.prototype.findOne = function* (doc, opt) {
//    let ret = yield this.model.findOne({where: doc});
//    if (!ret || !ret.dataValues) return F.returnData(1, '没有记录');
//    return F.returnData(0, '有记录', ret.dataValues);
//};

/*
 @todo 保存前先查询是否有这条记录
 @query 查询条件
 @opt 参数
 */
DaoBase.prototype.findOneForSave = function* (doc, opt) {
  let ret = yield this.model.findOne({where: doc});
  if (!ret || !ret.dataValues) return F.returnData(0, '没有记录');
  return F.returnData(0, '有记录', ret.dataValues);
};

/*
 *@todo 更新一条
 *@param  {Object}  values  修改的内容
 *@param  {Object}  options 修改的对象
 */
DaoBase.prototype.update = function* (values, options) {
  //更新
  let ret = yield this.model.update(values, {where: options});
  if (ret[0] == 0) return F.returnData(1, '更新失败', ret);
  //找回更新的内容
  let retOne = yield this.getOneByQuery(options);
  if (retOne.error == 1) return F.returnData(1, '更新成功但是没有找到这条数据~');
  return F.returnData(0, '更新成功', retOne.data);
};

/**
 @ todo raw query 执行sql语句
 * @param sql
 * @returns {*}
 */
DaoBase.prototype.rawQuery = function * (sql) {
  var result = yield sequelize.query(sql);
  return result;
};


module.exports = DaoBase;